from get_baidu_img import get_baiduimg
from auth_token import refresh_token
from qw_stream_openai import get_redbook_note_content, get_redbook_note_title


import os
import requests
import json


def get_search_trip():
    '''
    从文件获取景区名称
    '''

    all_js_data_path = "all_jq_data.txt"

    # 读取文件的第一行并删除第一行
    with open(all_js_data_path, 'r', encoding='utf-8') as file:
        lines = file.readlines()  # 读取所有行到列表中

    # 获取第一行数据（带换行符）  
    first_line_jq = lines[0].strip()    # 使用strip()去除换行符

    # 删除第一行
    del lines[0]  # 或者使用 lines.pop(0)

    # 将剩余的行写回文件
    with open(all_js_data_path, 'w', encoding='utf-8') as file:
        file.writelines(lines)  # 将剩余的行写回文件

    return first_line_jq


def list_files_in_directory(directory):
    '''
    获取所有的图片文件 列表
    '''
    all_img_list = []

    for filename in os.listdir(directory):
        filepath = os.path.join(directory, filename)
        if os.path.isfile(filepath):
            all_img_list.append(filepath)

    return all_img_list


def add_media(all_img_list):
    """
    新增临时素材: https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
    上传图文消息内的图片获取URL, 新增永久素材: https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
    新增其他类型永久素材, 新增永久素材: https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE
    """
    # url = f"https://api.weixin.qq.com/cgi-bin/media/upload?access_token={refresh_token()}&type=image"
    # url = f"https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token={refresh_token()}"
    url = f"https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={refresh_token()}&type=image"

    image_id_list = []

    for img_path in all_img_list:
        with open(img_path, 'rb') as fp:
            files = {'media': fp}
            res = requests.post(url, files=files)
            res = json.loads(str(res.content, 'utf8'))
            image_id_list.append({"image_media_id": res['media_id']})

            print(f'图片已上传 {img_path}')

    return image_id_list


def save_image_id_list(image_id_list):
    '''
    保存素材图片id列表
    '''
    with open('image_id_list.json', 'w') as f:
        json.dump(image_id_list, f)


def read_image_id_list():
    '''
    读取文件素材id列表
    '''
    try:
        with open('image_id_list.json', 'r') as f:
            image_id_list = json.load(f)
    except:
        image_id_list = []

    return image_id_list


def add_draft(note_title, note_content, image_id_list):
    '''
    新建草稿
    '''

    url = f'https://api.weixin.qq.com/cgi-bin/draft/add?access_token={refresh_token()}'

    data = {
        "articles": [
            {
                "article_type":"newspic",
                "title":note_title.strip('"'),
                "content": note_content,
                "need_open_comment":1,
                "only_fans_can_comment":0,
                "image_info": {
                    "image_list": image_id_list
                }
            }
        ]
    }

    res = requests.post(url=url, data=json.dumps(data, ensure_ascii=False).encode('utf-8'))

    if res.status_code == 200:
        result = json.loads(res.content)
        if result.get('media_id'):
            print(f'新建草稿成功--{result['media_id']}')
            return result['media_id']
        else:
            print(f'新建草稿失败--{result}')
    else:
        print(f'新建草稿失败--{res.text}')


def free_publish(media_id):
    '''
    发布草稿
    '''
    url = f'https://api.weixin.qq.com/cgi-bin/freepublish/submit?access_token={refresh_token()}'

    data = {
        "media_id": media_id
    }

    res = requests.post(url=url, json=data)
    res = json.loads(str(res.content, 'utf8'))
    print(res)


def del_media(image_id_list):
    '''
    删除上传的素材 避免素材过多
    '''
    url = f'https://api.weixin.qq.com/cgi-bin/material/del_material?access_token={refresh_token()}'


    for image_id in image_id_list:
        data = {
            "media_id": image_id['image_media_id']
        }


        res = requests.post(url=url, json=data)

    print("删除素材成功")


if __name__ == '__main__':
    # 先删除上一个文章的 素材图片 从文件读出所有的老的素材id
    image_id_list = read_image_id_list()

    # 删除上传的素材 避免素材过多
    del_media(image_id_list)

    # 先获取景区名称
    first_line_jq = get_search_trip()

    # 再下载景区图片
    # 给景区名称加上 “绝美高清图片” 修饰词 让百度图片搜索 更准确
    first_line_jq += "高清绝美风景图片"
    get_baiduimg(first_line_jq)

    # 获取所有的图片路径
    all_img_list = list_files_in_directory("all-baidu-img")

    # 然后把下载的图片 上传到公众号 素材库
    image_id_list = add_media(all_img_list)

    # 把素材id列表 存到一个文件里面 然后等下次调用这个脚本的时候删除 素材。因为素材发布 需要审核时间笔记长 所以需要下次再删除
    save_image_id_list(image_id_list)

    # 先获取文章的标题
    redbook_note_title = get_redbook_note_title(first_line_jq)

    # 再获取文章的内容
    redbook_note_content = get_redbook_note_content(first_line_jq)

    # 然后新建草稿
    media_id = add_draft(redbook_note_title, redbook_note_content, image_id_list)

    # # 发布草稿
    free_publish(media_id)

